<?php
/**
 * @class		ManageContactsController
 * @ingroup		manage_contacts_controllers
 * @brief		Controller của đối tượng Contact, thuộc về quản trị, bao gồm các phương thức điều khiển các luồng xử lý để quản lý đối tượng contact
 * @author		BaoNN
 * @version		1.0
 * @date		2009-2010
 */

class ManageContactsController extends AppController {
	/**
	 * @var $name
	 * @brief Tên của Controller
	 */
	var $name = 'ManageContacts';
	
	/**
	 * @var $uses
	 * @brief Tên của model
	 */
	var $uses = array('contacts.Contact');
	
	function beforeFilter() {
		parent::beforeFilter();
		
		$this->configs = $this->Contact->loadConfig();
		
		// Set Facility as default root for category
		$this->params['named']['root'] = '';

		$this->set('configs', $this->configs);
		//debug($this->configs);exit;
		
	}
	
	/**
	 * Phương thức index() dùng để liệt kê danh sách các liên hệ của người dùng
	 * 
	 * @return Danh sách các liên hệ người dùng
	 */
	function index() {
		$this->paginate['Contact'] = array(
			'limit'		=> 20,
			'order'		=> array("created desc")
		);
		$contacts = $this->paginate('Contact');
		$this->set(compact('contacts'));
	}
	
	/**
	 * Phương thức view($id) dùng để xem thông tin liên hệ từ một người dùng nào đó
	 * 
	 * @param $id int [optional]
	 * @return Thông tin liên hệ của người dùng tương ứng
	 */
	function view($id = null) {
		if($id) {
			$already_read_contact = 'UPDATE contacts SET status = 1 WHERE contacts.id = ' . $id;
			$this->Contact->query($already_read_contact);
			$contact = $this->Contact->find(
				'first', array(
					'conditions'	=> array('Contact.id'	=> $id)
				)
			);
			$this->set(compact('contact'));
		}
	}
	
	/**
	 * Phương thức edit($id) dùng để chỉnh sửa thông tin liên hệ từ phía người dùng
	 * 
	 * @param $id int [optional]
	 * @return 	Thông báo đã thay đổi thành công hoặc Ném ra lỗi nếu các điều kiện không hợp lệ
	 */
	function edit($id = null) {
		/**
		 * Nếu mã contact được gán giá trị thì thực hiện tác vụ chỉnh sửa thông tin
		 */
		if($id) {
			if(!empty($this->data)) {
				$this->Contact->set($this->data);
				if($this->Contact->validates()) {
					$this->data['Contact']['status'] = 1;
					if($this->Contact->save($this->data)) {
						$this->Session->setFlash(__('Liên hệ đã cập nhật thành công', true), "flash_success");
						$this->redirect(array('plugin' => 'contacts', 'controller' => 'manage_contacts', 'action' => 'index'));
					} else {
						$this->Session->setFlash(__('Không thể cập nhật liên hệ. Vui lòng thử lại', true), "flash_error");
					}
				}
			} else {
				$this->data = $this->Contact->read(null, $id);
			}
		} else {
			$this->Session->setFlash(__('Giá trị của id không đúng. Vui lòng thử lại', true), "flash_error");
		}
	}
	
	/**
	 * Phương thức delete($id) dùng để xóa một thông tin liên hệ từ người dùng
	 * 
	 * @param $id int [optional]
	 * @return Danh sách các liên hệ phía người dùng sau khi xóa
	 */
	function delete($id = null) {
		/**
		 * Nếu mã contact được gán giá trị thì thực hiện tác vụ chỉnh sửa thông tin
		 */
		if($id) {
			if($this->Contact->delete($id)) {
				$this->Session->setFlash(__('Liên hệ đã xóa thành công', true), "flash_success");
			} else {
				$this->Session->setFlash(__('Không thể xóa liên hệ vui lòng thử lại', true), "flash_error");
			}
		} else {
			$this->Session->setFlash(__('Giá trị của id không đúng. Vui lòng thử lại', true), "flash_error");
		}
		$this->redirect($this->referer());
	}
	
	/**
	 * Phương thức sendNewUserMail() dùng để phản hồi thông tin liên hệ cho người dùng
	 * 
	 * @return Thông báo gởi mail thành công hoặc thông báo lỗi nếu thất bại
	 */
	function sendNewUserMail() {
		$replyTo = Configure::read("Email.admin");
	    $this->Email->to = $this->data['Contact']['email'];
		if($this->data['Contact']['send_me'] == 1) {
			//bug: YM! not view content
			$this->Email->bcc = array($replyTo); 
		}
	    $this->Email->subject = $this->data['Contact']['title'];
	    $this->Email->replyTo = $replyTo;
	    $this->Email->from = 'Kinmedia master <'.$replyTo.'>';
	    //$this->Email->template = 'simple_message'; // note no '.ctp'
	    $this->Email->sendAs = 'html'; // because we like to send pretty mail
		
		if($this->Email->send($this->data['Contact']['content'])){
			$this->Session->setFlash(__('Tin nhắn của bạn đã được gửi thành công', true), "flash_success");
		} else {
			$this->Session->setFlash(__('Khônng thể gửi tin nhắn. Vui lòng thử lại', true), "flash_error");
		}
		$this->redirect(array('plugin' => 'contacts', 'controller' => 'manage_contacts', 'action' => 'index'));
		exit;
	}
	
	function mass_delete() {
		$checkboxes = array();
		if (isset($_POST['checkbox_index'])) {
			$checkboxes = $_POST['checkbox_index'];
		}

		if (count($checkboxes) > 0) {
			$this->Contact->deleteAll(array('Contact.id' => $checkboxes));
			
			$this->Session->setFlash(__("Thông tin liên hệ đã được xóa thành công!", true), "flash_success");
			$this->redirect(array(
				'action'	=>	'index'
			));
		} else {
			$this->Session->setFlash(__("Bạn vui lòng chọn các thông tin liên hệ cần xóa", true), "flash_error");
			$this->redirect(array(
				'action'	=>	'index'
			));
		}
	}
	
}
?>